package com.scedu.spring5;

import com.sun.corba.se.impl.ior.OldJIDLObjectKeyTemplate;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Arrays;

public class JDKProxy {
    public static void main(String[] args) {
        //创建接口实现类的代理对象
        Class[] interfaces={UserDao.class};
        //第二种 创建代理对象类
        UserDao userDao=new UserDaoImpl();
        UserDao userDao1 =(UserDao) Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), interfaces, new UserDaoProxy(userDao));
        Integer add = userDao1.add(1, 2);
        System.out.println(add);
        userDao1.update("8");

    }
}
//创建代理对象代码
class UserDaoProxy implements InvocationHandler{
    //把创建的是谁的代理对象，把谁传递过来
     //通过有参构造进行传递
    private Object object;
    public  UserDaoProxy(Object object){
        this.object=object;
        
    }
  //增强的逻辑写这里
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        //方法之前
        System.out.println("方法之前执行。。。"+method.getName()+" 传递的参数"+ Arrays.toString(args));
        //被增强的方法 执行
        Object res = method.invoke(object, args);
        //方法之后
        System.out.println("方法之后执行。。。"+object);
        return res;
    }
}
